home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / test / rtdump.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  2.0 KB  |  92 lines

  1. /*
  2.  *  rtdump.c -- dump an rtree file.
  3.  *
  4.  * $Header: /private/postgres/src/test/RCS/rtdump.c,v 1.3 1991/02/28 18:01:44 mao Exp $
  5.  */
  6. #include <stdio.h>
  7.  
  8. #include "tmp/c.h"
  9. #include "tmp/postgres.h"
  10.  
  11. #include "storage/bufmgr.h"
  12. #include "storage/bufpage.h"
  13. #include "storage/page.h"
  14.  
  15. #include "utils/log.h"
  16. #include "utils/rel.h"
  17.  
  18. #include "access/genam.h"
  19. #include "access/rtree.h"
  20. #include "access/itup.h"
  21.  
  22. extern char    *DBName;
  23.  
  24. main(argc, argv)
  25.     int argc;
  26.     char **argv;
  27. {
  28.     Relation index;
  29.     BlockNumber nblocks;
  30.     BlockNumber i;
  31.     OffsetNumber j, noff;
  32.     IndexTuple t;
  33.     ItemPointer itm;
  34.     BlockNumber h_block;
  35.     PageNumber h_pg;
  36.     OffsetNumber h_off;
  37.     Page p;
  38.     Buffer b;
  39.     extern char *optarg;
  40.     extern int optind, opterr;
  41.     char *indname;
  42.     RTreePageOpaque opaque;
  43.     int c;
  44.  
  45.     extern char *getenv();
  46.  
  47.     DBName = getenv("USER");
  48.  
  49.     while ((c = getopt("d:")) != EOF) {
  50.     if (c != 'd') {
  51.         fprintf(stderr, "illegal option %c\n", c);
  52.         fprintf(stderr, "usage: %s [-d dbname] index\n");
  53.         exit (1);
  54.     }
  55.     DBName = optarg;
  56.     }
  57.  
  58.     if ((indname = argv[optind]) == (char *) NULL) {
  59.     fprintf(stderr, "usage: %s [-d dbname] index\n");
  60.     exit (1);
  61.     }
  62.  
  63.     InitPostgres(DBName);
  64.  
  65.     if ((index = index_openr(indname)) == (Relation) NULL)
  66.     exit (1);
  67.  
  68.     nblocks = RelationGetNumberOfBlocks(index);
  69.  
  70.     for (i = 0; i < nblocks; i++) {
  71.     b = ReadBuffer(index, i);
  72.     p = BufferGetPage(b, 0);
  73.     noff = PageGetMaxOffsetIndex(p);
  74.     opaque = (RTreePageOpaque) PageGetSpecialPointer(p);
  75.     printf("Page %d maxoff %d flags 0x%x (%s)\n", i, noff, opaque->flags,
  76.             (opaque->flags & F_LEAF ? "leaf" : "internal"));
  77.     for (j = 0; j <= noff; j++) {
  78.         t = (IndexTuple) PageGetItem(p, PageGetItemId(p, j));
  79.         itm = &(t->t_tid);
  80.         h_block = ItemPointerGetBlockNumber(itm);
  81.         h_pg = ItemPointerGetPageNumber(itm, 0);
  82.         h_off = ItemPointerGetOffsetNumber(itm, 0);
  83.         printf("\t[%d,0,%d] <%d,%d,%d>\n", i, j, h_block, h_pg, h_off);
  84.     }
  85.     ReleaseBuffer(b);
  86.     }
  87.  
  88.     index_close(index);
  89.  
  90.     exitpg(0);
  91. }
  92.